\pagebreak{}
\section{Fallbeispiel}
\begin{flushright}
\scriptsize{}
Ein Gramm Beispiel wiegt mehr als ein Zentner Worte\\
Franz von Sales
\end{flushright}
\label{sec:Fallbeispiel}
In diesem Abschnitt soll anhand des IDEA-Algorithmus die Funktionsweise und Verwendung von \RENGA dargestellt werden. Der IDEA-Algorithmus wurde ge\-w\"ahlt, weil er innherhalb seiner Berechnungen eine modifizierte Multiplikation verwendet, die als Beispiel f\"ur die Implementierung eines neuen Primitiven dient. Wir werden auf die genaue Funktionsweise des Algorithmus nicht eingehen, da wir nur die graphische Darstellung des Algorithmus (Abbildung \ref{fig:IDEA-Diagram}) und die Tatsache, dass er eine modifizierte Multiplikation verwendet, ben\"otigen. F\"ur weitere Information sei auf \cite{handbook_oac} verwiesen.

\subsection{Modifizierte Multiplikation}
Zun\"achst soll die modifizierte Multiplikation als neuer Primitiver in \RENGA eingef\"uhrt werden.\\
IDEA verwendet die folgende Multiplikationsvorschrift f\"ur 16 Bit-Unsigned-In\-tegers:\\
Seien a und b die zu multiplizierenden Werte
\begin{enumerate}
\item{Wenn $a=0$ setze $a=2^{16} (\equiv -1\pmod 2^{16}+1$}
\item{Wenn $b=0$ setze $b=2^{16}$}
\item{Berechne $c=a\cdot b\mod 2^{16}$}
\item{Wenn $c=2^{16}$ setze c=0}
\end{enumerate}
Eine Implementierung kann dann wie folgt geschehen:
\begin {lstlisting}[label=listing:idea-mult,caption=Idea Mult-Implementierung,frame=single,keepspaces=true]
public class IDEA-Mult extends ... {
 public Unsigned16Bit apply (Unsigned16Bit a, 
 			Unsigned16Bit b) {
 	BigInteger zero = new BigInteger ("0");
 	
 	BigInteger exp2_16 = new BigInteger (
 		new Integer (((int)Math.pow (2, 
 			16))).toString ());
 	
 	BigInteger aVal = a.getValue();
 	BigInteger bVal = b.getValue();
 	
 	if (aVal.equals (zero)) {
 		aVal = exp2_16;
 	}
 	if (bVal.equals (zero)) {
 		bVal = exp2_16;
 	}
 	
 	BigInteger cVal = aVal.multiply (bVal).
           mod ("65537"));
 	if (cVal.equals (exp2_16)) {
 		cVal = zero;
 	}
 	
 	return new Unsigned16Bit(cVal);
 }
}
\end{lstlisting}
Neben der hier beschriebnen modifizierten Multiplikation wird auch der Key-Schedule von IDEA als Primitiver implementiert. F\"ur eine genauere Darstellung sei auf \cite{handbook_oac} verwiesen. Wir verzichten weiter auf die Darstellung der Implementierung einer Animation.

\subsection{Initialize}
Nachdem die beiden Funktionen implementiert sind, muss eine weitere Klasse implementiert werden, die Initializer-Klasse. Dies kann wie folgt geschehen:
\begin {lstlisting}[label=listing:Init,caption=IDEA-Initialize-Implementierung,frame=single,keepspaces=true]
public class IDEA-Initialize extends ... {
 public Unit apply () {
  OperationRegistry.getOperationRegistry().
   setOperationFactory("IDEA-Mult", 
    new AbstractConstantFunction<Operation> () {
     public Operation apply () {
      return new PrimitiveOperation (new IDEA-Mult(), 
       null, new ImageVisualisation( 
        /*Pfad zum Multiplikationsbild*/);
      }
    });

   OperationRegistry.getOperationRegistry().
    setOperationFactory("IDEA-Keyschedule", 
     new AbstractConstantFunction<Operation> () {
      public Operation apply () {
       return new PrimitiveOperation (new 
        IDEA-Keyschedule(), null, 
        new NamedBlockVisualisation(0,0,32,32,
         "Keyschedule"));
      }
     });
 }
}
\end{lstlisting}
Da keine weiteren Primitiven oder Operationen eingef\"uhrt wurden, ist keine weitere Arbeit zu leisten.

\subsection{Implementierung in RENGA} 
Nach dem Starten von \RENGA kann damit begonnen werden, IDEA zu implementeieren. Es m\"ussen dazu nur die im Diagramm des IDEA-Algorithmus Abbildung \ref{fig:IDEA-Diagram} dargestellten Primitiven hinzugef\"ugt und entsprechend verbunden werden. Das Ergebnis zeigt Abbildung \ref{fig:IDEA-RENGA}.\\
Die Art der Darstellung der Abbildung \ref{fig:IDEA-Diagram} entspricht der in Abschnitt \ref{subsec:Darstellung} beschriebenen.
\begin{figure}[htp]
\centering
\includegraphics[scale=1.1]{figures/IDEA-Diagram.eps}
\caption{Diagramm der Rundenfunktion des IDEA-Algorithmus}
\label{fig:IDEA-Diagram}
\end{figure}

\begin{figure}[htp]
\centering
\includegraphics[scale=.3]{figures/IDEA-RENGA.eps}
\caption{Rundenfunktion des IDEA-Algorithmus in \RENGA}
\label{fig:IDEA-RENGA}
\end{figure}
